#!/bin/bash

# =============================================================================
# 简化的应用重启脚本 - 用于代码更新后快速重启
# =============================================================================

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }

PROJECT_DIR="/var/www/memebot"

log_info "开始应用重启流程..."

# 检查项目目录
if [ ! -d "$PROJECT_DIR" ]; then
    log_error "项目目录不存在: $PROJECT_DIR"
    exit 1
fi

cd $PROJECT_DIR

# 检查必要文件
if [ ! -f "package.json" ]; then
    log_error "package.json 文件不存在"
    exit 1
fi

if [ ! -f ".env" ]; then
    log_error ".env 文件不存在"
    exit 1
fi

# 安装/更新依赖
log_info "检查并安装依赖..."
npm install

# 生成Prisma客户端
log_info "生成Prisma客户端..."
npx prisma generate

# 同步数据库结构
log_info "同步数据库结构..."
npx prisma db push

# 构建应用
log_info "构建应用..."
npm run build

# 重启PM2应用
log_info "重启应用服务..."
if pm2 describe memebot-trading > /dev/null 2>&1; then
    pm2 restart memebot-trading
    log_success "应用重启完成"
else
    log_info "应用未运行，正在启动..."
    if [ ! -f "ecosystem.config.js" ]; then
        log_warning "ecosystem.config.js 不存在，使用默认启动方式"
        pm2 start lib/price-server.js --name memebot-trading
    else
        pm2 start ecosystem.config.js
    fi
    log_success "应用启动完成"
fi

# 保存PM2配置
pm2 save

# 等待应用启动
log_info "等待应用启动..."
sleep 10

# 检查应用状态
if pm2 describe memebot-trading > /dev/null 2>&1; then
    log_success "应用运行正常"
    echo
    log_info "应用状态:"
    pm2 status
    echo
    log_info "最近日志:"
    pm2 logs memebot-trading --lines 5
else
    log_error "应用启动失败"
    pm2 logs memebot-trading --lines 20
    exit 1
fi

# 简单健康检查
log_info "执行健康检查..."
sleep 5
if curl -f -s http://localhost:3000 > /dev/null 2>&1; then
    log_success "健康检查通过 - 应用可正常访问"
else
    log_warning "健康检查失败 - 应用可能还在启动中"
fi

log_success "重启流程完成！"
echo
echo "可用命令:"
echo "  pm2 status                - 查看应用状态"
echo "  pm2 logs memebot-trading  - 查看应用日志"
echo "  pm2 restart memebot-trading - 重启应用"
echo "  pm2 stop memebot-trading  - 停止应用"
